var WebSocketUtil=function(url){
    this.status=0;//0:未连接，1：链接成功,2:链接错误,3:连接关闭
    this.url=url;
    this.handler={};
    this.connectionCount=0;//重连次数
    this.connectionSum=3;//总共重连多少次
    this.noConnectionFun=null;//无法连接时执行函数
    this.ws=null;
    this.funs=[];
}
WebSocketUtil.prototype.sendJsonStr=function(jsonObj){
    this.send(JSON.stringify(jsonObj))
}
WebSocketUtil.prototype.send=function(obj){
    var _this=this;
    var fun=function(){
        _this.ws.send(obj);
    }
    if(_this.status==1){
        _this.ws.send(obj);
        return;
    }
    if(_this.status==0||_this.status==3){
        _this.connection();
    }
    _this.funs.push(fun);
}
WebSocketUtil.prototype.connection=function(){
    this.ws=new WebSocket(this.url);
    var _this=this;
    this.ws.onopen=function(){
        _this.connectionCount=0;
        _this.status=1;
        while(_this.funs.length>0){
            _this.funs[0]();
            _this.funs.splice(0,1);
        }
    }
    this.ws.onmessage=function(e){
        if(typeof e.data =="string"){
            var json= JSON.parse(e.data);
            _this.handler[json.code](json.data);
        }
    }
    this.ws.onclose=function(){
        _this.status=3;
    }
    this.ws.onerror=function(){
        _this.status=2;
        _this.connectionCount++;
        if(_this.connectionCount>=_this.connectionSum){
            if(_this.noConnectionFun!=null){
                _this.noConnectionFun();
                return;
            }
            console.error("超过连接次数,无法重连,请检测网络");
            return;
        }
        _this.connection();
    }
}


